/*
 * PilaCondicional.h
 */

#ifndef PILACONDICIONAL_H_
#define PILACONDICIONAL_H_

#define CANT_MAX_IF_ANIDADOS 15
#define CHR_DEF_VALIDA '1'
#define CHR_DEF_INVALIDA '0'

#include <stack>

class PilaCondicional {
private:
	std::stack<char> pilaIfs;
public:
	PilaCondicional() {}
	virtual ~PilaCondicional() {}

	/** Agrega a la pila un indicador de definicion valida.
	 * @return Verdadero si no se supera el limite de anidación.
	 */
	bool marcarDefValida();

	/** Agrega a la pila un indicador de definicion no valida.
	 * @return Verdadero si no se supera el limite de anidación.
	 */
	bool marcarDefInvalida();

	/** Modifica la condicion de validez del ultimo elemento de la pila.
	 * @return Verdadero si la pila no está vacia.
	 */
	bool marcarElse();

	/** Remueve el ultimo elemento de la pila.
	 * @return Verdadero si la pila no está vacia.
	 */
	bool marcarEndIf();

	/** Devuelve el estado de validez actual (validez de la ultima directiva).
	 * @return Verdadero si la pila está vacia o el último elemento es válido.
	 */
	bool validezUltimaDirectiva() const;
};

#endif /* PILACONDICIONAL_H_ */
